﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;

namespace AvaProvi
{
    [Serializable]
    public class clsMedida_CRN : clsEstado
    {
        private clsFoto_CRN objImagenColindancia;

        #region Propirdades de clase
        public clsTerreno_CRN Terreno { get; set; }
        public string MedidaSegun { get; set; }
        public string NoEscritura { get; set; }
        public DateTime Fecha { get; set; }
        public string Notario { get; set; }
        public string NoNotario { get; set; }
        public string DatosRegistro { get; set; }
        public string ColindanciasPrivativas{ get; set; } 
        public decimal FrenteLote { get; set; }
        public string OrientacionLote { get; set; }
        public string Ubicacion { get; set; }
        public BindingList<clsColindancia_CRN> Colindancias { get; set; }
        public clsFoto_CRN ImagenColindancias
        {
            get
            {
                if (this.objImagenColindancia.Imagen.Length > 10)
                {
                    foreach (clsColindancia_CRN objColindancia in this.Colindancias)
                    {
                        objColindancia.EsEliminado = true;
                        objColindancia.Guardar();
                    }
                    this.Colindancias.Clear();
                }
                else
                {
                    if (this.Colindancias.Count == 0)
                        this.AgregarColindanciasPorDefault();
                }
                return objImagenColindancia; }
            set { objImagenColindancia = value; }
        }
        #endregion

        #region Constructor
        public clsMedida_CRN(clsTerreno_CRN objTerreno):base()
        {
            this.Terreno = objTerreno;
            this.ColindanciasPrivativas = string.Empty;
            this.DatosRegistro = string.Empty;
            this.Fecha = DateTime.Now;
            this.FrenteLote = 0;
            this.MedidaSegun = string.Empty;
            this.NoEscritura = string.Empty;
            this.NoNotario = string.Empty;
            this.Notario = string.Empty;
            this.OrientacionLote = string.Empty;
            this.Ubicacion = string.Empty;
            this.Colindancias = new BindingList<clsColindancia_CRN>();
            this.ImagenColindancias = new clsFoto_CRN(this.Terreno.Inmueble.Fotos, "Colindancias");
        }
        #endregion

        #region Métodos

        public bool Guardar()
        {
            if (this.DatosValidos())
            {
                if (this.EsNuevo)
                    this.CreaMedida();
                else
                {
                    if (this.EsModificado)
                        return ModificaMedida();
                    else
                        return EliminaMedida();
                }
            }
            return false;
        }

        private bool EliminaMedida()
        {
            clsMedida_CD objMedida = new clsMedida_CD();
            return objMedida.EliminaMedida(this);
        }

        private bool ModificaMedida()
        {
            clsMedida_CD objMedida = new clsMedida_CD();
            if(objMedida.ModificaMedida(this))
            {
                foreach (clsColindancia_CRN objColindancia in this.Colindancias)
                {
                    objColindancia.Guardar();
                }
                this.ImagenColindancias.Guardar();
                this.Colindancias = clsColindancia_CRN.RecuperaColindancias(this);
                return true;
            }
            return false;
        }

        private bool CreaMedida()
        {
            clsMedida_CD objMedida = new clsMedida_CD();
            if (objMedida.CreaNuevaMedida(this))
            {
                this.EsModificado = true;
                if (this.Colindancias != null)
                {
                    foreach (clsColindancia_CRN objColindancia in this.Colindancias)
                    {
                        objColindancia.Guardar();
                    }
                }
                this.ImagenColindancias.Guardar();
                this.Colindancias = clsColindancia_CRN.RecuperaColindancias(this);
                return true;
            }
            return false;
        }

        public bool DatosValidos()
        {
            return true;
        }

        public static clsMedida_CRN RecuperaMedida(clsTerreno_CRN objTerreno)
        {
            clsMedida_CD objMedida_CD = new clsMedida_CD();
            clsMedida_CRN objMedida = new clsMedida_CRN(objTerreno);
            dsTerreno.MedidasRow MedidaRecuperada = objMedida_CD.RecuperaMedida(objTerreno.Inmueble.Avaluo.IdAvaluo);
            if (MedidaRecuperada != null)
            {
                objMedida.ColindanciasPrivativas = MedidaRecuperada.ColindanciasPrivativas;
                objMedida.DatosRegistro = MedidaRecuperada.DatosRegistro;
                objMedida.EsModificado = true;
                objMedida.Fecha = MedidaRecuperada.Fecha;
                objMedida.FrenteLote = MedidaRecuperada.FrenteLote;
                objMedida.MedidaSegun = MedidaRecuperada.MedidasSegun;
                objMedida.NoEscritura = MedidaRecuperada.NoEscritura;
                objMedida.NoNotario = MedidaRecuperada.NoNotario;
                objMedida.Notario = MedidaRecuperada.Notario;
                objMedida.OrientacionLote = MedidaRecuperada.OrientacionLote;
                objMedida.Ubicacion = MedidaRecuperada.Ubicacion;
                objMedida.ImagenColindancias = clsFoto_CRN.RecuperaFotoDeInmueble(objMedida.Terreno.Inmueble.Fotos, "Colindancias");
                objMedida.Colindancias = clsColindancia_CRN.RecuperaColindancias(objMedida);
                //if(objMedida.Colindancias.Count == 0)
                //    objMedida.AgregarColindanciasPorDefault();
                
            }
            return objMedida;
        }

        private void AgregarColindancia(string Orientacion)
        {
            clsColindancia_CRN objColindancia = new clsColindancia_CRN(this, Orientacion);
            this.Colindancias.Add(objColindancia);
        }

        public void AgregarColindanciasPorDefault()
        {
            AgregarColindancia("Norte");
            AgregarColindancia("Sur");
            AgregarColindancia("Este");
            AgregarColindancia("Oeste");
            AgregarColindancia("Noreste");
            AgregarColindancia("Sureste");
            AgregarColindancia("Noroeste");
            AgregarColindancia("Suroeste");
        }

        public void ConvertirANuevo()
        {
            this.EsNuevo = true;
            this.Colindancias = new BindingList<clsColindancia_CRN>();
            this.AgregarColindanciasPorDefault();
            this.ImagenColindancias = new clsFoto_CRN(this.Terreno.Inmueble.Fotos, "Colindancias");
        }

        #endregion

    }
}
